<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

<script>
// 赋值
var num = 9 + 9, str = '123';

// 基础数据类型：number、string、boolean、undefined、null
  // undefined：但凡 声明了变量，没给其赋值，其值就 undefined
  // 若我们需要主动给一个变量 赋值为空/清空变量：  变量名 = null;
// 数据类型的判断： typeof 变量名：'number'、string、boolean、undefined、** 'object'

// 三种循环：
// while、do while、 for
// 循环中的关键字：break 终止循环； continue 跳出本次循环 - 即 continue 下面的代码 当次循环不被 执行

// 分支语句：
  // if  /  else   /  if else(布尔值表达式)
  // 
    /* switch -> 将 变量名 与 value 进行 === 判断，若为 true, 执行其下面的代码，直到遇到 break 停止执行
      switch (变量名):
        case value:
          代码执行：
    */

// 函数
/* 两种声明形式：
  1. 声明式
  function 函数名 (形参1, 形参2, ...) {

  }

  2. 赋值式
  var 函数名 = function (形参1, 形参2, ...) {

  }

  // 两种声明形式的特性区别：
    // 声明式 预解析 ->  代码 开始执行前，先将函数声明到放内存当中；即 函数的 执行 可以在函数声明 之前。
    // 赋值式没有预解析，因为 var 声明，做了「变量提升」，即 代码执行之前，先将 var 变量名 之前执行，此时 变量名的值 为 undefined
*/
// 作用域：全局作用域  和  函数作用域
  // 作用：确定 变量 的值
  /* 
    var x = 1, y = 2;
    function add () {
      return x + y;
    }
    因为 函数作用域中 没有  x  和  y，所以 x 和 y 值的确定，其向上寻找，在 全局作用域中 找到了 x 和 y
    若，全局作用域 也没有 x 和 y ,就报 not defined 的报错。



    在作用域 中 变量值的确定，只能 由里向外 寻找，反之 不行
    function sub() {
      var a = 1, b = 2
    }
    console.log(a, b)  ->  报错 - not defined
  */

 /* 若函数作用域中有  变量的声明  或 形参，就 函数内部的值 不会 向外层作用域 寻找
    例子1：
      var x = 1, y = 2;
      function add (x, y) {
        return x + y;
      }
      add(9, 8);  x ->  9,  y  ->  8
      add();   x  ->  undefined,  y ->  undefined

    例子2：
      var x = 1, y = 2;
      function add () {
        var x = 11, y = 22;
        return x + y;
      }
      add(9, 8);  x ->  11,  y  ->  22


    例子3：
    var x = 1, y = 2;
    function add (x, y) {
      var x = 9, y = 9;
      return x + y;  // x 和 y 寻找的原则，「就近原则」
    }
    console.log(add(8, 8));  x  ->  9,  y  ->  9

 */



</script>